An important development in computer processing has been multiprocessor systems, which use more than one processor, each capable of independent action to execute applications programming. Different program tasks are assigned to separate processors, each processor optimized to perform its assigned task, with the result that execution time of the application is reduced. Some multiprocessor systems have processors that are dissimilar as well as separate, each having its own instruction set. Even the idea of separate processors is evolving; a developing innovation is fabricating dissimilar processors in an integrated circuit.
Multiprocessor systems vary with respect to the manner in which they use software as an interface between processors. When separate processors are to execute different programs, the interface is standard network communications protocols. In contrast, when separate processors are to execute different tasks of one integrated application, the interface is a matter of assigning functions.
In a system having a host processor and a subsystem processor, an important design choice is how many subprocessor functions will be fixed, i.e., not programmable by the user. One approach is to provide all functions required for applications programs already built in. Yet, because of the difficulty of predicting which functions the user will actually use, systems designed with this approach attempt to be all inclusive, and become large and slow, defeating the purpose of using a separate processor in the first place. Another approach is to provide only a limited number of built-in functions, i.e., primitives, and permit users to add additional subprocessor functions to the system. The characteristic of accommodating user developed functions that extend the primitive functions of the subsystem is referred to the "extensibility" of the subsystem.
Yet, in many multiprocessor systems, although a user may program the subsystem processor, the extended functions are linked once, for example, to form a library, and are thereafter not capable of being changed. At run time, this statically linked library must be loaded into memory in entirety. Of course, this is a disadvantage to a user who does not desire to load the entire library or who desires to add new functions.
Thus, a need exists for a method of extending functions of a subprocessor system, which does not confine the user to a fixed set of functions. A user should be able to program extended functions that can be linked to other functions of the subprocessor system, as required by a particular application.